package net.zoneland.knowledge.enums;

/**
 * 工单里所有分任务的整体状态.
 *
 * @author: caoyifeng
 * 2022/10/18
 */
public enum WorkStatusOfSubTaskEnum {
    /**
     * 有分任务在办理.
     */
    SUBTASKS_ANY_HANDLE("SUBTASKS_ANY_HANDLE", "分任务办理中"), //

    /**
     * 所有分任务已完成.
     */
    SUBTASKS_ALL_FINISHED("SUBTASKS_ALL_FINISHED", "分任务处理完成", ProcessStateEnum.FINISH),

    /**
     * 所有分任务已下发.
     */
    SUBTASKS_ALL_ISSUED("SUBTASKS_ALL_ISSUED", "等待下级上报", ProcessStateEnum.SUSPEND),

    /**
     * 所有分任务已上报、或是上报后已经得到上级确认.
     */
    SUBTASKS_ALL_REPORTED("SUBTASKS_ALL_REPORTED", "等待上级确认", ProcessStateEnum.SUSPEND), //

    /**
     * 分任务已下发和上报.
     */
    SUBTASKS_ISSUED_AND_REPORTED("SUBTASKS_ISSUED_AND_REPORTED", "等待上级确认和下级上报", ProcessStateEnum.SUSPEND);

    /**
     * 构造.
     *
     * @param value 值
     * @param name  名称
     */
    WorkStatusOfSubTaskEnum(final String value, final String name) {
        this.value = value;
        this.name = name;
    }

    /**
     * 构造.
     *
     * @param value        值
     * @param name         名称
     * @param processState 流程状态（待办/挂起等）
     */
    WorkStatusOfSubTaskEnum(final String value, final String name, final ProcessStateEnum processState) {
        this.value = value;
        this.name = name;
        this.processState = processState;
    }

    /**
     * key.
     */
    private String value;

    /**
     * label.
     */
    private String name;

    /**
     * 流程状态，默认是待办状态（需要人处理的）。
     */
    private ProcessStateEnum processState = ProcessStateEnum.TODO;

    /**
     * .
     *
     * @return value
     */
    public String getValue() {
        return value;
    }

    /**
     * .
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * Gets the value of processState.
     *
     * @return the value of processState
     */
    public ProcessStateEnum getProcessState() {
        return processState;
    }

    public static WorkStatusOfSubTaskEnum getByValue(String value) {
        for (WorkStatusOfSubTaskEnum categoryEnum : WorkStatusOfSubTaskEnum.values()) {
            if (categoryEnum.value.equals(value)) {
                return categoryEnum;
            }
        }
        return null;
    }
}
